/*************************************************
Description:完成系统设置功能
            1.主要包括连接ZigBee的串口号、波特率等串口信息的设置
            2.系统启动默认参数设置(比如开机启动，软件名称……)
            2.系统主题
**************************************************/
#include "systemsettingdialog.h"
#include "ui_systemsettingdialog.h"
#include "myapp.h"
#include "myhelper.h"

#include <QDebug>
#include <QTextStream>
#include <QFile>
#include <QJsonParseError>
#include <QJsonValue>
#include <QJsonDocument>
#include <QJsonArray>
#include <QJsonObject>
#include <mymqtt.h>

SystemSettingDialog::SystemSettingDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::SystemSettingDialog)
{
    ui->setupUi(this);

    this->initForm();
    this->initData();

    //this->initConnect();
}

SystemSettingDialog::~SystemSettingDialog()
{
    delete ui;
}

void SystemSettingDialog::initForm()
{
    //设置窗体标题栏隐藏
    this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowSystemMenuHint);
//                         | Qt::WindowMinMaxButtonsHint);




    this->setMaximumSize(450,300);
    this->setMinimumSize(450,300);
    ui->label_title->setText(tr("SystemSetting"));
    ui->pbnreflesh->setEnabled(false);
    ui->deviceselect->setEnabled(false);




}

void SystemSettingDialog::initData()
{



}



void SystemSettingDialog::initConnect()
{


}


void SystemSettingDialog::on_pbnOk_clicked()
{
//    Myapp::winPortName = ui->cbx_PortName->currentText();
//    Myapp::baudRate = ui->cbx_PortBaud->currentText().toInt();
//    Myapp::WriteConfig();


//    // 读取文件的全部内容
//    QString data;
//    QFile file (":/node.json");
//    if(!file.open(QIODevice::ReadOnly))
//        {
//            qDebug()<<"open read error";
//            return;
//        }
//    QTextStream stream(&file);
//    stream.setCodec("UTF-8");// 设置读取编码是UTF8
//    data = stream.readAll();
//    file.close();//关闭文件

//    //将字符串解析成QJsonDocument对象
//    QJsonParseError jsonerror;
//    QJsonDocument doc = QJsonDocument::fromJson(data.toUtf8(), &jsonerror);
//    if (jsonerror.error != QJsonParseError::NoError && !doc.isNull())
//    {
//        qDebug() << "Json格式错误！" << jsonerror.error;
//        return;
//    }
//    //获取根 { }
//    QJsonObject rootObj = doc.object();
//    //修改 "mqtt_server":{ }中的值
//    QJsonValue interestValue = rootObj.value("mqtt_server");
//    if (interestValue.type() == QJsonValue::Object) {
//        QJsonObject interestObject = interestValue.toObject();
//        QString text =ui->mqttip->text();
//         qDebug() << "text is" << text;
//        interestObject["addr"] = text;
//        //interestObject["port"] = "足球";

//        rootObj["mqtt_server"] = interestObject;
//    }
//    //写入文件
//    //先将修改好的rootObj设置为文档的主要对象
//    doc.setObject(rootObj);
//    // 重写打开文件，覆盖原有文件，达到删除文件全部内容的效果
//    QFile writeFile("2.txt");
//    if (!writeFile.open(QFile::WriteOnly | QFile::Truncate))
//    {
//        qDebug() << "open write error!";
//        return;
//    }
//    // 将修改后的内容写入文件
//    QTextStream wirteStream(&writeFile);
//    wirteStream.setCodec("UTF-8");		// 设置读取编码是UTF8
//    wirteStream << doc.toJson();		// 写入文件
//    writeFile.close();					// 关闭文件



    //Qt资源文件只能读,无法写
    //通过信号槽将IP地址传给mqtt


    myHelper::showMessageBoxInfo(tr("configuration success!"));
    this->close();
}



void SystemSettingDialog::on_tbnMenuClose_clicked()
{
    this->close();
}




void SystemSettingDialog::on_pbnokmqtt_clicked()
{
    emit settingsignal(ui->mqttip->text(),ui->mqttport->text());
    //ui->pbnokmqtt->setEnabled(false);
    //ui->pbnokmqtt->setEnabled(true);

}

void SystemSettingDialog::on_pbncancle_clicked()
{
    emit cancelsignal();
}


void SystemSettingDialog::on_upmethod_currentIndexChanged(const QString &arg1)
{

        if(arg1=="刷新上报")
        {
            ui->pbnreflesh->setEnabled(true);
            ui->deviceselect->setEnabled(true);
        }
        else
        {
            ui->pbnreflesh->setEnabled(false);
            ui->deviceselect->setEnabled(false);
        }

        if(arg1=="定时上报")
            ui->upperiod->setEnabled(true);
        else
            ui->upperiod->setEnabled(false);

}

void SystemSettingDialog::on_pbnset_clicked()
{
    //读取设置信息
    QString device = ui->deviceselect->currentText();
    QString method = ui->upmethod->currentText();
    QString period = ui->upperiod->currentText();


    //修改上报模式(周期/变化/定时)
    QJsonObject jsObject;
    jsObject.insert("type",QJsonValue(3));  //修改模式



    //要求
    //刷新上报
//    {
//        "type": 1, //指令类型：1-采集指令
//        "limit": "all", //采集数据点范围，all/part，默认全部采集，也可单点或者部分点采集。
//        "keys": [1, 2, 3, 4] //limit为part时有效，表示采集点的key值
//    }


       // jsObject.insert("limit","all");  //要修改的设备,默认全部修改

    //修改模式
//    {
//      "type": 3, //指令类型：3-模式修改
//        "data": {
//            "type": 1, //0-不上报，客户端主动采集；1-变化上报，即连续2次值不相等；2-周期上报
//            "period": 5 //上报周期时间，单位秒，仅在type=2时需要增加
//        }
//    }


    //按照设置组json


     QJsonObject tmpObject;
     if(method=="刷新上报")
     {
       tmpObject.insert("type",0);//刷新上报即不上报,需点击刷新按钮主动采集
     }
     else if(method=="变化上报")
     {
       tmpObject.insert("type",1);//设置为变化上报
     }
     else if(method=="定时上报")
     {
       tmpObject.insert("type",2);//周期上报就是定时上报,需要设置周期

       tmpObject.insert("period",period.toInt());//周期上报就是定时上报,需要设置周期
     }

     //将json发送给网关

     jsObject.insert("data",QJsonValue(tmpObject));
     QString str = QString(QJsonDocument(jsObject).toJson(QJsonDocument::Compact));
     emit signaltomqtt(str);//需要建立信号槽


}

void SystemSettingDialog::on_pbnreflesh_clicked()
{

//    //如果没有点击设置按钮,则先执行设置
//    on_pbnset_clicked();

    QString device = ui->deviceselect->currentText();

    //等待3s再刷新


    //发送刷新数据的请求(json格式)
     QJsonObject jsObject;
     jsObject.insert("type",QJsonValue(1));  //主动采集
     //QJsonObject tmpObject;
     if(device=="全部设备")
     jsObject.insert("limit","all");//默认全部设备都刷新
     else
     {
     jsObject.insert("limit","part");
     if(device=="客厅温度")
         jsObject.insert("keys",101);
     else if(device=="客厅湿度")
         jsObject.insert("keys",102);
     else if(device=="卧室烟雾")
         jsObject.insert("keys",301);
     else if(device=="卧室电量")
         jsObject.insert("keys",302);
     }

     //将json发送给网关
     QString str = QString(QJsonDocument(jsObject).toJson(QJsonDocument::Compact));
     emit signaltomqtt(str);//需要建立信号槽



}

